// 存放登录注册接口

const db = require('../db');

// const uitls = require('utility');
// let { md5 } = { md5: ffffff, aaa: xxxxx, ddd: yyyyy }
let { md5 } = require('utility'); // 用于加密密码

const jwt = require('jsonwebtoken'); // 用于创建token

const express = require('express');

// 创建路由对象
const router = express.Router();

// 服务端的数据验证
router.use((req, res, next) => {
  let { username, password } = req.body;
  if (username.length < 2 || username.length > 10) {
    next('用户名必须是2~10位');
  } else if (password.length < 6 || password.length > 12) {
    next('密码必须是6~12位');
  } else {
    next();
  }
});

// 写接口（将接口挂载到路由对象上）
// -------------------------- 注册接口 -----------------------------
/**
 * 请求方式：POST
 * 接口地址：/api/reguser
 * 请求体： username | password
 */
router.post('/reguser', (req, res) => {
  // 1. 接收客户端提交的数据
  // console.log(req.body); // { username: 'laotang', password: '123456' }
  let { username, password } = req.body;
  // 2. 判断账号是否存在
  db(`select * from user where username='${username}'`, (err, result) => {
    if (err) throw err;
    // console.log(result); // 结果是非空数组，说明账号已存在；结果是空数组，说明账号不存在

    if (result.length === 0) {
      // 说明账号能用，能够注册
      // 对密码进行 加密处理
      password = md5(password);
      // 3. 注册（把账号保存到 user 表）
      db(`insert into user set username='${username}', password='${password}'`, (e, r) => {
        if (e) throw e;
        res.send({ status: 0, message: '注册成功' });
      });
    } else {
      // 说明账号已经存在了
      res.send({ status: 1, message: '账号已存在' })
    }

  });
});


// -------------------------- 登录接口 -----------------------------
/**
 * 请求方式：POST
 * 接口地址：/api/login
 * 请求体： username | password
 */
router.post('/login', (req, res) => {
  // 1. 获取请求体
  // console.log(req.body); // { username: 'laotang', password: '123123' }
  let { username, password } = req.body;
  // 2. 判断账号密码是否正确
  password = md5(password);
  db(`select * from user where username='${username}' and password='${password}'`, (err, result) => {
    if (err) throw err;
    // console.log(result); // 账号密码正确得到非空数组；账号密码不匹配得到空数组
    if (result.length > 0) {
      // 创建token
      let token = jwt.sign({ id: result[0].id }, 'sadfss22', { expiresIn: '2h' });
      res.send({ status: 0, message: '登录成功', token: 'Bearer ' + token })
    } else {
      res.send({ status: 1, message: '账号或密码错误' })
    }
  })
})


// 错误处理中间件
router.use((err, req, res, next) => {
  res.send({ status: 1, message: err })
})

// 导出路由对象（接口可以不写，到必须导出）
module.exports = router;